package com.bipbip.modelo;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import lombok.Data;

import org.apache.log4j.Logger;
import org.springframework.context.annotation.Scope;

@Entity
@Table(name = "Viaje")
@Scope("session")
public @Data class Viaje {
	
	@Id
	@Column(name = "id")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int id;
	
	@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinColumn(name = "idPublicacion")
	private Publicacion publicacion;
	
	@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinColumn(name = "idVehiculo")
	private Vehiculo vehiculo;
	
	@Column(name = "fechaInicio")
	private Date fechaInicio;
	
	@Column(name = "fechaFin")
	private Date fechaFin;
	
	private static Logger log = Logger.getLogger(Viaje.class);
	
	@OneToMany( cascade=CascadeType.ALL, mappedBy = "viaje")
	private List<Lugar> lugares = new ArrayList<Lugar>();

	public void agregarLugar(String coordX, String coordY, String direccion, Date fecha) {
		Lugar l = new Lugar(coordX, coordY, fecha);
                l.setDireccion(direccion);
		l.setViaje(this);
		lugares.add(l);
	}

	public void agregarLugar(Lugar l1) {
		l1.setViaje(this);
		lugares.add(l1);
	}

	public void setFechaFin(String fechaFin) {
		this.fechaFin = leerFecha(fechaFin);
	}

	public void setFechaInicio(String fechaInicio) {
		this.fechaInicio = leerFecha(fechaInicio);
	}
	
	private Date leerFecha(String xfecha){

		SimpleDateFormat formatoDelTexto = new SimpleDateFormat("dd-MM-yyyy");
		Date fecha = null;
		try {
			fecha = formatoDelTexto.parse(xfecha);
		} catch (Exception ex) {
			log.error("Error en la fecha ", ex);
		}
		return fecha;
	}

	public void setFechaFin(Date fin) {
		fechaFin = fin;
	}

	public void setFechaInicio(Date inicio) {
		fechaInicio = inicio;
	}

    @Override
    public int hashCode() {
        int hash = 1;
        hash = hash * 17 + vehiculo.hashCode();
        hash = hash * 31 + fechaFin.hashCode();
        hash = hash * 13 + fechaInicio.hashCode();
        return hash;
    }

}
